import io from 'socket.io-client'
import store from '@/store'
import { Notification, MessageBox } from 'element-ui'

// 模块作用 收发消息
// 创建链接
const socket = io()

// 进行连接建立的监听
socket.on('connect', () => {
  console.log('连接已建立')
})

// 监听room_info收消息
socket.on('room_info', ({ nicknames, holder, lines }) => {
  console.log(nicknames, holder, lines)
  store.commit('updateNicknames', nicknames)
  store.commit('updateHolder', holder)
  store.commit('updateLines', lines)
})

// 监听当前的user_enter，通知，有新人进入
socket.on('user_enter', nickname => {
  // 此处nickname是进入房间玩家的名字
  store.commit('addToNicknames', nickname)
})

// 监听socket的连接，控制按钮
socket.on('connect', () => {
  store.commit('updateConnected', true)
})

// 监听socket的断开，控制按钮
socket.on('disconnect', () => {
  store.commit('updateConnected', false)
})

// 处理游戏开始
socket.on('game_started', holder => {
  store.commit('updateHolder', holder)
  Notification.success(`${holder} 作为主持人开始了新游戏！`)
})
// 处理游戏已经开始, 不能重复开始
socket.on('already_started', holder => {
  store.commit('updateHolder', holder)
  Notification.alert('当前已有游戏在进行中，主持人是：' + holder)
})

// 监听游戏终止并重置信息
socket.on('game_stoped', () => {
  // 清除相关数据
  store.commit('updateHolder', '')
  store.commit('updateLines', [])

  // 弹出提示
  Notification.warning('主持人结束当前游戏')
})

// 监听线的开始绘制
socket.on('starting_line', line => {
  store.commit('drawNewLine', line)
})

// 监听线的持续绘制
socket.on('updating_line', line => {
  store.commit('updateNewLine', line)
})

// 监听猜答案
socket.on('game_answered', ({ alreadyDone, success, nickname, answer }) => {
  // 有人答对
  if (alreadyDone) {
    MessageBox.alert('有人猜中了')
    return
  }

  // 无人答对
  if (!success) {
    Notification.error(`玩家${nickname}猜的${answer}不对!`)
    return
  }

  // 你答对了
  MessageBox.alert(`玩家${nickname}猜对了，答案是${answer}!`)
})

// 监听并广播离开的人
socket.on('user_leave', nickname => {
  store.commit('delFromNicknames', nickname)
  Notification.error(`玩家${nickname}退出`)
  // 主持人退出 提示
  if (nickname === store.state.holder) {
    store.commit('updateHolder', '')
    store.commit('updateLines', [])
    Notification.error('主持人离开')
  }
})

// 导出模块
export default socket
